import random

from django.http import HttpResponse
from django.shortcuts import render
from django_redis import get_redis_connection
# Create your views here.
from rest_framework.response import Response
from rest_framework.views import APIView
from libs.captcha.captcha import captcha
from libs.yuntongxun.sms import CCP
from verifications.serializer import RegisterSmscodeSerializer

"""
1.分析需求
2.把需要做得事情些下来
3.请求方式 路由
4.确定视图
5.按照步骤实现功能




前段传递一个uuid过来 后端生成一个图片

1.接收image_code_id
2.生成图片和验证码
3.把验证码保存到redis中
4.返回图片响应

GET /verifications/imagecodes/(?P<image_code_id>.+)/


"""

class RegisterImageAPIView(APIView):
    def get(self,request,image_code_id):
        # 2.生成图片和验证码
        text, image = captcha.generate_captcha()
        # 3.把验证码保存到redis中
        redis_conn = get_redis_connection('code')
        redis_conn.setex('img_%s' % image_code_id, 60, text)
        # 4.返回图片响应
        # 注意,图片是二进制,我们通过HttpResponse返回
        return HttpResponse(image, content_type='image/jpeg')


"""
当用户点击 获取短信按钮的时候的前段应该将手机号,图片验证码以及 验证码id传送给后端
1.接受数据
2.校验数据
3.生成短信
4.将短信验证码保存在redis中
5.使用云通讯发送短信
6.返回响应

GET             verfications/smscode/(?P<mobile>1[345789]\d{9})/?text=xxx&image_code_id=xxxx
    一种是路由 weather/beijing/2018/
    另外一个是查询字符串 weather/?place=beijing&year=2018
混合起来也可以的
    weather/2018/?place=beijing
POST

"""
class RegisterSmscodeAPIView(APIView):

    def get(self,request,mobile):

        # 1.接受数据
        params = request.query_params
        # 2.校验数据
        serializer = RegisterSmscodeSerializer(data=params)
        # 3.生成短信
        sms_code = "%06d"%random.randint(0,999999)
        print('短信验证码%s'%sms_code)
        # 4.将短信验证码保存在redis中
        redis_conn = get_redis_connection("code")
        redis_conn.setex('sms_%s' % mobile, 60, sms_code)
        # 5.使用云通讯发送短信
        # ccp = CCP()
        # ccp.send_template_sms(mobile, [sms_code, 5], 1)
        from celery_tasks.sms.tasks import send_sms_code
        # delay的参数 和任务的参数对应
        send_sms_code.delay(mobile,sms_code)
        # 6.返回响应

        return Response({'message': 'ok'})

    """
    写信
    投递到邮箱



    """




